﻿Public Class clsEmpleado
    Inherits clsPersona

    Private Legajo As Integer
    Private Categoria As String
    Private Sucursal As Integer
    'Private NroDoc As Integer
    'Private TipoDoc As Integer

    Private FechaIngreso As Date
    Private FechaEgreso As Date

    Public Property pLegajo() As Integer
        Get
            Return Legajo
        End Get
        Set(ByVal value As Integer)
            Legajo = value
        End Set
    End Property

    Public Property pCategoria() As Integer
        Get
            Return Categoria
        End Get
        Set(ByVal value As Integer)
            Categoria = value
        End Set
    End Property

    Public Property pSucursal() As Integer
        Get
            Return Sucursal
        End Get
        Set(ByVal value As Integer)
            Sucursal = value
        End Set
    End Property

    Public Property pFechaIng() As Date
        Get
            Return FechaIngreso
        End Get
        Set(ByVal value As Date)
            FechaIngreso = value
        End Set
    End Property

    Public Property pFechaEg() As Date
        Get
            Return FechaEgreso
        End Get
        Set(ByVal value As Date)
            FechaEgreso = value
        End Set
    End Property

    'la siguiete propiedad es para los mensajes de error
    Private MsgEmpleado As String
    Public Property pMsgEmpleado() As String
        Get
            Return MsgEmpleado
        End Get
        Set(ByVal value As String)
            MsgEmpleado = value
        End Set
    End Property


    Private dbConexion As clsConexion

    Public Sub New()
        dbConexion = New clsConexion
    End Sub

    Public dbEmplDataRow As DataRow
    Public dbEmplDataSet As DataSet

    Public Function fn_EjecutarQueryEmpl(ByVal Tipo As TipoQuery) As Boolean
        Try
            Dim EjecutarQuery As Boolean = False
            Dim SqlQuery As String
            If dbConexion.fn_abrir Then
                Select Case Tipo
                    Case TipoQuery.InfoIndividual
                        SqlQuery = "SELECT * FROM Empleado " & _
                                   "WHERE  Legajo = @Legajo"

                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Categoria", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Categoria").Value = pCategoria

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Sucursal", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Sucursal").Value = pSucursal

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@FechaIng", Data.SqlDbType.Date))
                        dbConexion.dbcommand.Parameters("@FechaIng").Value = pFechaIng

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@FechaEgr", Data.SqlDbType.Date))
                        dbConexion.dbcommand.Parameters("@FechaEgr").Value = pFechaEg

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@TipoDoc", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@TipoDoc").Value = pTipoDoc

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@NroDoc", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@NroDoc").Value = pNroDoc


                        dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                        dbConexion.dbdataset = New DataSet
                        dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Empleado")
                        If dbConexion.dbdataset.Tables.Count > 0 Then
                            EjecutarQuery = True
                            dbEmplDataRow = dbConexion.dbdataset.Tables("Empleado").Rows(0)
                            dbConexion.dbdataadapter.Dispose()
                            dbConexion.dbdataset.Dispose()
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgEmpleado = "Error al obtener la información del empleado."
                        End If
                    Case TipoQuery.InfoTodo
                        SqlQuery = "SELECT * FROM Empleado"
                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                        dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                        dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Empleado")
                        If dbConexion.dbdataset.Tables.Count > 0 Then
                            EjecutarQuery = True
                            dbEmplDataSet = dbConexion.dbdataset.Copy()
                            dbConexion.dbdataadapter.Dispose()
                            dbConexion.dbdataset.Dispose()
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgEmpleado = "Error al obtener la información de las personas."
                        End If
                End Select
            Else
                MsgEmpleado = "No se pudo establecer la conexión con la bse de datos."
            End If
            Return (EjecutarQuery)
        Catch ex As Exception
            MsgEmpleado = "Ocurrio un problema al ejecutar la consulta." & vbCrLf & ex.Message
            Return (False)
        End Try
    End Function

    Public Function fn_ValidarDatosEmpl(ByVal Operacion As String) As Boolean
        Select Case Operacion
            Case "Add", "Upd", "Del"
                If Trim(pLegajo) = 0 Then
                    MsgEmpleado = "Debe proporcionar el Legajo del Empleado"
                    Return (False)
                End If

                If Trim(pNroDoc) = 0 Then
                    MsgEmpleado = "Debe proporcionar el Numero de Documento del Empleado"
                    Return (False)
                End If

                If Trim(pTipoDoc) = 0 Then
                    MsgEmpleado = "Debe proporcionar el Tipo De Documento del Empleado"
                    Return (False)
                End If
        End Select

        Select Case Operacion
            Case "Add", "Upd"
                If Trim(pCategoria) = "" Then
                    MsgEmpleado = "Debe proporcionar la Categoria"
                    Return (False)
                End If

                If Trim(pSucursal) = "" Then
                    MsgEmpleado = "Debe proporcionar la Sucursal"
                    Return (False)
                End If

        End Select
        Return (True)
    End Function

    Public Function fn_AddEmpleado() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String

            If fn_ValidarDatosEmpl("Add") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " insert into Empleado(Legajo,Categoria,Sucursal,FechaIngreso,FechaBaja,TipoDoc,NroDoc) " & _
                               " values(@Legajo,@Categoria,@Sucursal,@FechaIng,@FechaEgr,@TipoDoc,@NroDoc) "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo()

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Categoria", Data.SqlDbType.Int))
                        .Parameters("@Categoria").Value = pCategoria

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Sucursal", Data.SqlDbType.Int))
                        .Parameters("@Sucursal").Value = pSucursal

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@FechaIng", Data.SqlDbType.Date))
                        .Parameters("@FechaIng").Value = pFechaIng

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@FechaEgr", Data.SqlDbType.Date))
                        .Parameters("@FechaEgr").Value = pFechaEg

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@TipoDoc", Data.SqlDbType.Int))
                        .Parameters("@TipoDoc").Value = pTipoDoc

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@NroDoc", Data.SqlDbType.Int))
                        .Parameters("@NroDoc").Value = pNroDoc

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgEmpleado = "Se obtuvo errores al agregar el Empleado."
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgEmpleado = "Error al agregar el Empleado." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function
    Public Function fn_DelEmpleado() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String
            If fn_ValidarDatosEmpl("Del") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " delete from  Empleado " & _
                               " where   Legajo=@Legajo "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgEmpleado = "Se obtuvo errores al eliminar el empleado"
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgEmpleado = "Error al agregar el Empleado." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function

    Public Function fn_UpdEmpleado() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String
            If fn_ValidarDatosEmpl("Upd") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " update Empleado" & _
                               " set Categoria = @Categoria, Sucursal= @Sucursal, FechaIngreso= @FechaIng, FechaBaja = @FechaEgr" & _
                                " where Legajo = @Legajo  "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo()

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Categoria", Data.SqlDbType.Int))
                        .Parameters("@Categoria").Value = pCategoria

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Sucursal", Data.SqlDbType.Int))
                        .Parameters("@Sucursal").Value = pSucursal

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@FechaIng", Data.SqlDbType.Date))
                        .Parameters("@FechaIng").Value = pFechaIng

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@FechaEgr", Data.SqlDbType.Date))
                        .Parameters("@FechaEgr").Value = pFechaEg

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@TipoDoc", Data.SqlDbType.Int))
                        .Parameters("@TipoDoc").Value = pTipoDoc

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@NroDoc", Data.SqlDbType.Int))
                        .Parameters("@NroDoc").Value = pNroDoc

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgEmpleado = "Se obtuvo errores al modificar el Empleado."
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgEmpleado = "Error al agregar el Empleado." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function

End Class

